package ar.uba.fi.algo3.algoTank.model.tanques;

import ar.uba.fi.algo3.algoTank.model.Vector;
import ar.uba.fi.algo3.algoTank.model.armas.Arma;
import ar.uba.fi.algo3.algoTank.model.bonus.Bonus;
import ar.uba.fi.algo3.algoTank.model.cuarteles.Cuartel;
import ar.uba.fi.algo3.algoTank.model.estrategias.EstrategiaAtaque;
import ar.uba.fi.algo3.algoTank.model.estrategias.EstrategiaMovimiento;
import ar.uba.fi.algo3.algoTank.model.formas.Figura;
import ar.uba.fi.algo3.algoTank.util.Constantes;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;

public abstract class TanqueEnemigo extends Tanque implements ObjetoVivo {

	private EstrategiaAtaque estrategiaAtaque;

	private EstrategiaMovimiento estrategiaMovimiento;

	private int puntosPorDestruccion;

	public TanqueEnemigo(Figura forma) {
		super(forma);
	}

	public int getPuntosPorDestruccion() {
		return puntosPorDestruccion;
	}

	public void setPuntosPorDestruccion(int puntosPorDestruccion) {
		this.puntosPorDestruccion = puntosPorDestruccion;
	}

	public EstrategiaAtaque getEstrategiaAtaque() {
		return estrategiaAtaque;
	}

	public void setEstrategiaAtaque(EstrategiaAtaque estrategiaAtaque) {
		this.estrategiaAtaque = estrategiaAtaque;
	}

	public EstrategiaMovimiento getEstrategiaMovimiento() {
		return estrategiaMovimiento;
	}

	public void setEstrategiaMovimiento(EstrategiaMovimiento estrategiaMovimiento) {
		this.estrategiaMovimiento = estrategiaMovimiento;
	}

	private Enum<Constantes.direccion> calcularSiguienteMov() {
		Vector posActual = this.getPosicion();
		Vector posObjetivo = estrategiaAtaque.posicionObjetivo();
		return estrategiaMovimiento.getSiguienteDireccion(posActual, posObjetivo);
	}

	public boolean hayColision(Bonus bonus) {
		return false;
	}

	public boolean hayColision(Arma arma) {
		return false;
	}

	public boolean hayColision(Cuartel cuartel) {
		return false;
	}

	public void colisionar(Cuartel cuartel) {

	}

	public void colisionar(Bonus bonus) {

	}

	public void colisionar(Arma arma) {

	}

	public void vivir() {
		this.mover(this.calcularSiguienteMov());
		this.disparar();
	}
}
